--SEQUENCIA PARA ID DE RESPONSABLE
CREATE SEQUENCE AUTO_IDRESPONSABLE INCREMENT BY 1 MINVALUE 10000001;

--PROCEDIMIENTOS PARA DAR DE ALTA A UN RESPONSABLE
CREATE OR REPLACE PROCEDURE ALTA_RESPONSABLE
(NOMBRERESP$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,EDAD$ IN NUMBER,PARENTESCO$ IN VARCHAR2,CALLE$ IN VARCHAR2,COLONIA$ IN VARCHAR2,NUMERO$ IN NUMBER,MOVIL$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
	IDRESPONSABLE_AUX  		NUMBER(8);
	AUTO_IDRESPONSABLE_AUX 	NUMBER(8);
BEGIN
	IF (EDAD$ > 17) OR (PARENTESCO$='MADRE') OR (PARENTESCO$='PADRE') THEN	
		SELECT AUTO_IDRESPONSABLE.NEXTVAL INTO AUTO_IDRESPONSABLE_AUX FROM DUAL;
		INSERT INTO RESPONSABLE(IDRESPONSABLE,NOMBRERESP,APELLIDOP,APELLIDOM,SEXO,EDAD,PARENTESCO,CALLE,COLONIA,NUMERO,MOVIL)
		VALUES(AUTO_IDRESPONSABLE_AUX,NOMBRERESP$,APELLIDOP$,APELLIDOM$,SEXO$,EDAD$,PARENTESCO$,CALLE$,COLONIA$,NUMERO$,MOVIL$);
		
		SELECT IDRESPONSABLE INTO IDRESPONSABLE_AUX FROM RESPONSABLE WHERE IDRESPONSABLE=AUTO_IDRESPONSABLE_AUX;

		INSERT INTO TELEFONOHORARIO(IDRESPONSABLE,TELEFONO,HORARIO)
		VALUES(IDRESPONSABLE_AUX,TELEFONO$,HORARIO$);
		COMMIT;
		DBMS_OUTPUT.PUT_LINE('RESPONSABLE AGREGADO: '||IDRESPONSABLE_AUX);
	ELSE
		DBMS_OUTPUT.PUT_LINE('EDAD INVALIDA');
	END IF;
END ALTA_RESPONSABLE;
/

EXEC ALTA_RESPONSABLE('Frederick Valentin','Alvarez','Flores','H',21,'Hermano','18 de Julio','Juarez',20,5523092471,58237232,'8.00-14.00');
EXEC ALTA_RESPONSABLE('Hector Ivanny','Salas','Lopez','H',21,'Hermano','Granada 38','Higera',38,55215582,58237232,'9.00-16.00');

--########################ALTA DE NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE AGREGAR_TELEFONO_RESPONSABLE(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
BEGIN
	INSERT INTO TELEFONOHORARIO(IDRESPONSABLE,TELEFONO,HORARIO)VALUES(IDRESPONSABLE$,TELEFONO$,HORARIO$);
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUEVO NUMERO HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END AGREGAR_TELEFONO_RESPONSABLE;
/

EXEC AGREGAR_TELEFONO_RESPONSABLE(10000004,66666666,'1.00-15-00');
EXEC AGREGAR_TELEFONO_RESPONSABLE(10000001,11111111,'8.00-15-00');
--########################ALTA DE NUMERO TELEFONICO PARA UN RESPONSABLE############################

--PROCEDIMIENTO PARA DAR DE BAJA UN RESPONSABLE
CREATE OR REPLACE PROCEDURE BAJA_RESPONSABLE(IDRESPONSABLE$ IN NUMBER)
AS
BEGIN
	DELETE FROM RESPONSABLE WHERE IDRESPONSABLE=IDRESPONSABLE$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL RESPONSABLE HA SIDO ELIMINADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END BAJA_RESPONSABLE;
/

EXEC BAJA_RESPONSABLE(10000002);

--########################ELIMINA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE ELIMINA_TELEFONO_RESPONSABLE(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER)
AS
BEGIN
	DELETE FROM TELEFONOHORARIO WHERE IDRESPONSABLE=IDRESPONSABLE$ AND TELEFONO=TELEFONO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NUMERO DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUMERO HA SIDO ELIMINADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ELIMINA_TELEFONO_RESPONSABLE;
/

EXEC ELIMINA_TELEFONO_RESPONSABLE(10000004,66666666)
--########################ELIMINA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################


--PROCEDIMIENTO PARA ACTUALIZAR LOS DATOS DE UN RESPONSABLE
CREATE OR REPLACE PROCEDURE ACTUALIZA_RESPONABLE(IDRESPONSABLE$ IN NUMBER,NOMBRERESP$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,EDAD$ IN NUMBER,PARENTESCO$ IN VARCHAR2,CALLE$ IN VARCHAR2,COLONIA$ IN VARCHAR2,NUMERO$ IN NUMBER,MOVIL$ IN NUMBER)
AS
BEGIN
	IF (EDAD$ > 17) OR (PARENTESCO$='MADRE') OR (PARENTESCO$='PADRE') THEN	
		UPDATE RESPONSABLE SET NOMBRERESP=NOMBRERESP$,APELLIDOP=APELLIDOP$,APELLIDOM=APELLIDOM$,SEXO=SEXO$,EDAD=EDAD$,PARENTESCO=PARENTESCO$,CALLE=CALLE$,COLONIA=COLONIA$,NUMERO=NUMERO$,MOVIL=MOVIL$ WHERE IDRESPONSABLE=IDRESPONSABLE$;
		IF SQL%NOTFOUND THEN
			DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
		ELSE
			DBMS_OUTPUT.PUT_LINE('EL RESPONSABLE HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
			COMMIT;
		END IF;
	ELSE
		DBMS_OUTPUT.PUT_LINE('EDAD INVALIDA');
	END IF;
END ACTUALIZA_RESPONABLE;
/

EXEC ACTUALIZA_RESPONABLE(10000003,'Alejandro','Diaz','Tecante','H',21,'Hermano','zoltan kodaly','San simon',24,5523092433);
--########################ACTUALIZA HORARIO PARA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE ACTUALIZA_HORARIO_TEL_RES(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
BEGIN
	UPDATE TELEFONOHORARIO SET HORARIO=HORARIO$ WHERE IDRESPONSABLE=IDRESPONSABLE$ AND TELEFONO=TELEFONO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NUMERO DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUMERO HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ACTUALIZA_HORARIO_TEL_RES;
/

EXEC ACTUALIZA_HORARIO_TEL_RES(10000003,58237232,'24H');
--########################ACTUALIZA HORARIO PARA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################
